using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using Magiq.Behaviors;

namespace Magiq.Update {
    public interface IUpdateDefinition<T> : IBehaviorBasedExecution
    {
        IUpdateDefinition<T> Set<TReturn>(Expression<Func<T, TReturn>> property, TReturn value);
        IUpdateDefinition<T> Set<TReturn>(Expression<Func<T, TReturn>> property, Expression<Func<T, TReturn>> value);
        int Update();
        IEnumerable<IPropertySet> PropertySets { get; }
        IEnumerable<T> Source { get; }
    }
}